/*
  作者：bilibili_cly
  版权所有：© 2024 bilibili_cly
  B站主页：https://space.bilibili.com/642010138
  许可：除非授权，否则仅限于个人学习和非商业用途使用。
*/

const EventUtils = {
  // 初始化节流和防抖定时器对象
  throttleTimers: {},
  debounceTimers: {},

  // 节流函数
  Throttle(key, func, delay) {
    if (!this.throttleTimers[key]) {
      this.throttleTimers[key] = null;
    }

    // 返回一个箭头函数，确保内部的this指向EventUtils对象
    return (...args) => {
      if (!this.throttleTimers[key]) {
        this.throttleTimers[key] = setTimeout(() => {
          func.apply(this, args); // 执行传入的函数
          this.throttleTimers[key] = null; // 清空节流定时器，使得下次可以再次触发
        }, delay);
      }
    };
  },

  // 防抖函数
  Debounce(key, func, delay) {
    if (this.debounceTimers[key]) {
      clearTimeout(this.debounceTimers[key]);
    }

    // 返回一个箭头函数，确保内部的this指向EventUtils对象
    return (...args) => {
      if (this.debounceTimers[key]) {
        clearTimeout(this.debounceTimers[key]);
      } else {
        func.apply(this, args); // 执行传入的函数
      }

      this.debounceTimers[key] = setTimeout(() => {
        this.debounceTimers[key] = null; // 清空防抖定时器，使得下次可以再次触发
      }, delay);
    };
  },
};

export default EventUtils;
